package com.phospherus.common.repository;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.repository.NoRepositoryBean;

import java.io.Serializable;
import java.util.List;

/**
 * @author songjinlong
 * @version 1.0
 * @since 2017/11/8
 */
@NoRepositoryBean
public interface BaseRepository<T, ID extends Serializable> extends JpaRepository<T, ID> {

    /**
     * 分页获取数据
     *
     * @param pageable 分页参数
     * @return 当前页
     */
    Page<T> findAll(Pageable pageable);

    /**
     * 动态条件，分页
     *
     * @param specification 查询条件
     * @param pageable      分页参数
     * @return 当前页
     */
    Page<T> findAll(Specification<T> specification, Pageable pageable);

    /**
     * 动态条件
     *
     * @param specification 查询条件
     * @return 所有
     */
    List<T> findAll(Specification<T> specification);

    /**
     * 动态条件，排序
     *
     * @param specification 查询条件
     * @param sort          排序规则
     * @return 当前页
     */
    List<T> findAll(Specification<T> specification, Sort sort);
}
